/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.clyme.expediente.servicios;


import com.clyme.expediente.dao.PerfilDao;
import com.clyme.expediente.dao.UsuarioDao;
import com.clyme.expediente.daoImpl.PerfilDaoImpl;
import com.clyme.expediente.daoImpl.UsuarioDaoImpl;
import com.clyme.expediente.entidad.Perfil;
import com.clyme.expediente.entidad.Usuario;
import com.clyme.expediente.hibernate.HibernateConexion;
import com.clyme.expediente.utilitarios.IConexion;
import com.clyme.expediente.utilitarios.Utilitario;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
public class UsuarioServicio {
    PerfilDao daoPerfil;
    UsuarioDao daoUsuario;
    IConexion conexion;

    public UsuarioServicio() {
        conexion = new HibernateConexion();
        daoPerfil = new PerfilDaoImpl(conexion);
        daoUsuario = new UsuarioDaoImpl(conexion);
    }
    
    public List<Usuario> obtenerUsuarios()
    {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        conexion.beginConexion();
        usuarios = daoUsuario.obtenerTodosActivos(Usuario.class);
        conexion.closeConexion();
        return usuarios;
    }
    
    public List<Perfil> obtenerPerfiles(){
        List<Perfil> auxPerfiles = new ArrayList<Perfil>();
        conexion.beginConexion();
        auxPerfiles = daoPerfil.obtenerTodos(Perfil.class);
        conexion.closeConexion();
        return auxPerfiles;
    }
    
    public void registrarUsuario(Usuario usuario){
        conexion.beginTransaccion();
        daoUsuario.agregar(usuario);
        Utilitario.enviarMensajeGlobalValido("Se ha registrado correctamente");
        conexion.closeTransaccion();
    }
    
    public void actualizarUsuario(Usuario usuario)
    {
        conexion.beginTransaccion();
        daoUsuario.actualizar(usuario);
        Utilitario.enviarMensajeGlobalValido("Se ha actualizado correctamente");
        conexion.closeTransaccion();
    }
    
    public Usuario obtenerUsuarioPorId(Integer id){
        Usuario auxUsuario = null;
        conexion.beginConexion();
        auxUsuario = (Usuario) daoUsuario.buscarPorId(Usuario.class, id);
        auxUsuario.getPerfil().getId();/** estos get van a permitir nuestra carga lazy**/
        conexion.closeConexion();
        return auxUsuario;
    }
    
    /** VALIDACIONES **/
    
    public boolean esValido(Usuario usuario, String nickTemporal){
        conexion.beginConexion();
        boolean resultado=true;
        if(!esUsuarioValido(usuario,nickTemporal)){ 
            resultado = false;
        }
        if(!resultado){
            conexion.closeConexion();
        }
        return resultado;
    }
    
    private boolean esUsuarioValido(Usuario usuario,String nickTemporal)
    {
        boolean resultado = true;
        if(!Utilitario.esNulo(nickTemporal) && nickTemporal.equals(usuario.getNick())){
            resultado = true;
        }else if(daoUsuario.getUsuarioPorNick(usuario.getNick())!= null){
            Utilitario.enviarMensajeGlobalError("El usuario ya existe");
            resultado = false;
        }
        return resultado;
    }
    
    
    
}
